本專題爬蟲系列文章:
Python scrapy 爬取 Y combinator Blog
Python requests 模擬網站登入爬蟲
Python requests 與api 破解動態載入網頁爬蟲
其實幾乎所有爬蟲都適合,但是selenium的速度相對慢了一些;所以盡量是在棘手的情況下再使用。
像Google Search或大部分部落格的換頁都會產生獨立url;但有些網站的換頁是動態載入,甚至有的是滑到底自動載入更多的設計,必須讓scroll距離最上面的高度到一個值,才會觸發新的內容渲染到網頁。
這時用selenium能模擬使用者在網頁上行為來克服再適合不過。
我的習慣是用邏輯去協助理解和記憶code,這樣比較能避免死記用法但無法活用的窘境。
可以選擇用jupyter或python script(在terminal打"python"就可以啟動)
jupyter好處是可以把結果直接存在.ipynb
,適合如果對code還不熟悉需要多次嘗試的朋友。
from selenium import webdriver
from bs4 import BeautifulSoup
# list用來存等一下所選的所有物件
ELE = []
browser = webdriver.Chrome()
webdriver.get('https://anewstip.com/search/tweets/?q=AI+mobile&fsb=journalists#')
browser.find_element_by_xpath('//div[@class="pages-select"]/a[contains(text(), "Next")]').click()
soup = BeautifulSoup(browser.page_source, 'html.parser')
for ele in soup.select('.info-name'):
print(ele.text)
browser.close()
以上片段組合並加入迴圈:(因為希望它每爬完一頁作者姓名後自動換頁繼續爬)
from selenium import webdriver
from bs4 import BeautifulSoup
ELE = []
browser = webdriver.Chrome()
webdriver.get('https://anewstip.com/search/tweets/?q=AI+mobile&fsb=journalists#')
# 先預設換頁10次
for i in range(1, 11):
soup = BeautifulSoup(browser.page_source, 'html.parser')
for ele in soup.select('.info-name'):
print(ele.text)
browser.find_element_by_xpath('//div[@class="pages-select"]/a[contains(text(), "Next")]').click()
browser.close()